#ifndef QQMUSIC_H
#define QQMUSIC_H

#include <QWidget>
#include"volumetool.h"
#include<QFileDialog>
#include"musiclist.h"
#include<QMediaPlayer>
#include<QMediaPlaylist>
#include"commonpage.h"
#include"lrcpage.h"
#include<QSqlDatabase>

QT_BEGIN_NAMESPACE
namespace Ui { class QQMusic; }
QT_END_NAMESPACE

class QQMusic : public QWidget
{
    Q_OBJECT

public:
    QQMusic(QWidget *parent = nullptr);
    ~QQMusic();

    //初始化与界面相关的函数
    void initUi();
    //初始化播放器的函数
    void initPlayer();
    void initMusicList();
    //初始化数据库(创建连接+创建表格)
    void InitSqlite();
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void ConnectSignalsAndSlots();
    //播放page所在页面的音乐
    void playAllOfCommonPage(CommonPage* page,int index);
    QJsonArray RandomPicture();


//自定义的槽函数
    void handler(int pageid);
    void OnUpdateLikeMusic(bool IsLike,QString musicId);
    void OnPlayStateChanged(QMediaPlayer::State state);
    void OnPlayBackMode();
    void onPlayAll(PageType pagetype);
    void OncurrentIndexChanged(int index);
    void playMusicByindex(CommonPage* page,int index);

    void setIsMuted(bool ismuted);
    void setPlayerVolume(int volumeRatio);
    //播放源时间改变的时候会触发的信号
    void onDurationChanged(qint64 duration);
    void onPositionChanged(qint64 position);
    void onMusicSilderPosChanged(float ration);
    //将歌曲数据写入到数据库文件中
    void WriteToDB();
    //从数据库文件中读取数据,加入到musicList中进行管理
    void ReadDB();
    void quitQQMusic();//真正的退出
private slots:
    void on_quit_clicked();

    void on_volume_clicked();

    void on_addLocal_clicked();

    void on_play_clicked();

    void on_playDown_clicked();

    void on_playUp_clicked();
    void onMetaDataAvailableChangedChanged(bool Available);
    void on_lrcWord_clicked();

    void on_min_clicked();
    //更新动画,当currentpage进行改变的时候
    void updateAnimation();
private:
    Ui::QQMusic *ui;
    QSqlDatabase sqlite;
    QPoint dragPosition;
    VolumeTool* volumetool;
    MusicList musicList;//管理从文件中加载的音乐的集合

    QMediaPlayer* player;
    QMediaPlaylist* playList;//管理要播放音乐的集合

    CommonPage* currentPage;//记录当前正在播放歌曲的页面

    qint64 totalTime;//播放歌曲的总时长

    int index;//记录当前页播放歌曲的索引
    LrcPage* lrcPage;//lrc窗口对象
    bool drag;
};
#endif // QQMUSIC_H
